﻿using System;
using System.Collections.Generic;
using System.Data;

using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using Lib.Common;
using Lib.Utility;
using Module.BusinessLogic;
using Module.Core.LoginSystem.Commons.Framwork;

namespace Web.Cms.Content.Articles
{
    public partial class ListArticles : AdminUserControl
    {
        #region Khai báo biến
        private int totalRecords;
        private int cPage = 1;
        private DateTime startDate;
        private DateTime endDate;
        private string searchby = "";

        private string zoneId;
        string keyword;
        int status = 0;

        #endregion

        #region OnInit
        protected override void OnInit(EventArgs e)
        {
            try
            {
                base.OnInit(e);
                CMSZonesBL.GetDataComboType(DropZone, "0", "(" + ModulTypeBL.TinTuc.Type.ToString() + ")");//BinCombo Cateid                       
            }
            catch (Exception ex)
            {
                lberror.Text = "Error: " + ex.Message;
            }
        }
        #endregion

        #region OnPreRender
        protected override void OnPreRender(EventArgs e)
        {
            base.OnPreRender(e);
            try
            {
                LoadData();
            }
            catch (Exception ex)
            {
                lberror.Text = "Error: " + ex.Message;
            }
        }
        #endregion

        #region PageLoad
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {

                if (!IsPostBack)
                {
                    ReturnText();
                }
                GetValueTextBox();
            }
            catch (Exception ex)
            {
                lberror.Text = "Error: " + ex.Message;
            }
        }
        #endregion

        #region LoadData
        protected void LoadData()
        {
            try
            {
                if (_StatusContent == 0)
                {
                    status = ConvertUtility.ToInt32(Request.QueryString["status"]);
                }
                else
                {
                    status = _StatusContent;
                }
                int lang = 1;
                int createdBy = 0;
                if (txtKeyword.Text != "")
                    searchby = txtKeyword.Text.Trim();
                if (Request.QueryString.Get("cpage") != null)
                    cPage = ConvertUtility.ToInt32(Request.QueryString.Get("cPage"));
                if (cPage == 0) cPage = 1;
                int from = (cPage - 1) * ObjConstants.pageSize20 + 1;
                if (from == 1) from = 0;
                int to = (cPage) * ObjConstants.pageSize20;
                totalRecords = CMSContentsBL.GetCountContent(status, lang, ConvertUtility.ToInt32(DropZone.SelectedValue), searchby, createdBy, startDate, endDate);
                PagingAjax1.totalRecords = totalRecords;
                PagingAjax1.numPerPage = ObjConstants.pageSize20;
                PagingAjax1.queryParam = MiscUtility.GetCPPage(CurrentCommand.CtrlKey,
                                        new string[] { "keyword", "from", "to", "zoneId", "status", "startDate", "endDate", "cPage" },
                                        new string[] { txtKeyword.Text.Trim(), from.ToString(), to.ToString(), zoneId, status.ToString(), startDate.ToString(), endDate.ToString(), "" });

                PagingAjax1.defaultQueryParam =
                    MiscUtility.GetCPPage(CurrentCommand.CtrlKey,
                                        new string[] { "keyword", "from", "to", "zoneId", "status", "startDate", "endDate" },
                                        new string[] { txtKeyword.Text.Trim(), from.ToString(), to.ToString(), zoneId, status.ToString(), startDate.ToString(), endDate.ToString() });

                dgrContents.DataSource = CMSContentsBL.SelectSearchAll(status, lang, ConvertUtility.ToInt32(DropZone.SelectedValue), searchby, createdBy, startDate, endDate, from, to);
                dgrContents.ItemDataBound += new DataGridItemEventHandler(dgrContents_ItemDataBound);
                dgrContents.DataBind();
            }
            catch (Exception ex)
            {
                lberror.Text = "Error: " + ex.Message;
            }
        }
        #endregion

        #region ItemDataBound
        void dgrContents_ItemDataBound(object sender, DataGridItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                DataRowView drv = (DataRowView)e.Item.DataItem;
                Label lblStt = (Label)e.Item.FindControl("lblStt");
                lblStt.Text = (ObjConstants.pageSize20 * (cPage - 1) + e.Item.ItemIndex + 1).ToString();
                Label lbStatus = (Label)e.Item.FindControl("lbStatus");
                ImageButton btnStatus = (ImageButton)e.Item.FindControl("btnStatus");
                lbStatus.Text = CheckStatus(ConvertUtility.ToInt32(drv["Status"]));
                if (ConvertUtility.ToInt32(drv["Status"]) == ObjConstants.DangTrenSite)
                {
                    btnStatus.ImageUrl = "/App_Themes/Default/Images/Buttons/btn_pending.gif";
                    btnStatus.OnClientClick = "return confirm('Bạn có chắc chắn gỡ bài viết này xuống không ?')";
                }
                else if (ConvertUtility.ToInt32(drv["Status"]) == ObjConstants.ChoDuyet)
                {
                    btnStatus.ImageUrl = "/App_Themes/Default/Images/Buttons/btn_forward.gif";
                    btnStatus.OnClientClick = "return confirm('Bạn có chắc chắn đăng bài viết này không,bài viết sẽ được hiển thị trên website ?')";
                    btnStatus.ImageUrl = "/App_Themes/Default/Images/Buttons/btn_forward.gif";
                }
                else if (ConvertUtility.ToInt32(drv["Status"]) == ObjConstants.GoXuong)
                {
                    btnStatus.ImageUrl = "/App_Themes/Default/Images/Buttons/btn_forward.gif";
                    btnStatus.OnClientClick = "return confirm('Bạn có chắc chắn khôi phục bài viết này xuống không. Bài viết sẽ chuyển về chờ duyệt ?')";
                    btnStatus.ImageUrl = "/App_Themes/Default/Images/Buttons/btn_reset.gif";
                }
                else if (ConvertUtility.ToInt32(drv["Status"]) == ObjConstants.DangSoan)
                {
                    btnStatus.ImageUrl = "/App_Themes/Default/Images/Buttons/btn_forward.gif";
                    btnStatus.OnClientClick = "return confirm('Bạn có chắc chắn gửi chờ duyệt bài viết này không ?')";
                    btnStatus.ImageUrl = "/App_Themes/Default/Images/Buttons/btn_forward.gif";
                }
            }
        }
        #endregion

        #region RowCommand
        public void dgrContents_RowCommand(object sender, DataGridCommandEventArgs e)
        {
            try
            {
                string backstring = MiscUtility.GetCPPage(CurrentCommand.CtrlKey,
                                                             new string[]
                                                             {
                                                                 "keyword", "from", "to", "zoneId", "status", "startDate",
                                                                 "endDate"
                                                             },
                                                             new string[]
                                                             {
                                                                 txtKeyword.Text.Trim(), "", "", zoneId, status.ToString(),
                                                                 startDate.ToString(), endDate.ToString()
                                                             });
                if (Request.QueryString.Get("cPage") != null)
                {
                    backstring += "&cPage=" + Request.QueryString.Get("cPage");
                }
                switch (e.CommandName)
                {
                    case "edit":
                        Response.Redirect(MiscUtility.GetCPPage("CreateEditArtiles", new string[] { "contentId", "back" }, new string[] { e.CommandArgument.ToString(), HttpUtility.UrlEncode(backstring) }));
                        break;
                    case "Commanddelete":
                        try
                        {
                            int contentId = Convert.ToInt32(e.CommandArgument);
                            CMSContentsBL.Delete(contentId);                           
                        }
                        catch (Exception ex)
                        {
                            lberror.Text = ex.Message;
                        }
                        break;
                    case "CommandStatus":
                        try
                        {
                            string contentId = e.CommandArgument.ToString();
                            contentId = "(0," + contentId + ")";
                            CMSContentsBL.UpdateStatus(contentId, _StatusContent);                           
                        }
                        catch (Exception ex)
                        {
                            lberror.Text = ex.Message;
                        }
                        break;
                    default:
                        break;
                }
            }
            catch (Exception ex)
            {
                lberror.Text = ex.Message;
            }
        }
        #endregion

        #region ReturnText
        private void ReturnText()
        {
            int status = 0;
            if (_StatusContent == 0)
            {
                status = ConvertUtility.ToInt32(Request.QueryString["status"]);
            }
            else
            {
                status = _StatusContent;
            }
            lbTitle.Text = "";
            lbstatus.Text = "";
            if (status == ObjConstants.DangSoan)
            {
                lbstatus.Text = "<img src=\"/App_Themes/Default/Images/Buttons/btn_forward.gif\"> Chức năng này sẽ chuyển bài viết lên trạng thái: Gửi chờ duyệt";
            }
            else if (status == ObjConstants.ChoDuyet)
            {
                lbstatus.Text = "<img src=\"/App_Themes/Default/Images/Buttons/btn_forward.gif\"> Chức năng này sẽ chuyển bài viết lên trạng thái: Bài viết đăng trên website";
            }
            else if (status == ObjConstants.DangTrenSite)
            {
                lbstatus.Text = "<img src=\"/App_Themes/Default/Images/Buttons/btn_pending.gif\"> Chức năng này sẽ ngừng đăng bài viết trên website";
            }
            else if (status == ObjConstants.GoXuong)
            {
                lbstatus.Text = "<img src=\"/App_Themes/Default/Images/Buttons/btn_reset.gif\">Chức năng này khôi phục lại bài viết -> Bài viết sẽ chuyển về trạng thái chờ duyệt";
            }
        }
        #endregion

        #region Hiển thị trạng thái
        string CheckStatus(int status)
        {
            string Outstr = "";
            if (status == ObjConstants.DangSoan)
            {
                Outstr = "Đang soạn";
            }
            else if (status == ObjConstants.ChoDuyet)
            {
                Outstr = "Chờ duyệt";
            }
            else if (status == ObjConstants.DangTrenSite)
            {
                Outstr = "Đăng trên site";
            }
            else if (status == ObjConstants.GoXuong)
            {
                Outstr = "Gỡ xuống";
            }
            return Outstr;
        }
        #endregion

        #region Gán các giá trị vào textbox khi search hoặc chọn phân trang
        private void GetValueTextBox()
        {
            zoneId = DropZone.SelectedValue;
            keyword = txtKeyword.Text.Trim();
            if (txtStartDate.Text != "")
            {
                startDate = Convert.ToDateTime(txtStartDate.Text);
            }
            else
            {
                startDate = DateTime.Now.AddYears(-1);
            }
            txtStartDate.Text = startDate.ToString();
            if (txtEndDate.Text != "")
            {
                endDate = Convert.ToDateTime(txtEndDate.Text);
            }
            else
            {
                endDate = DateTime.Now.AddDays(+1);
            }
            txtEndDate.Text = endDate.ToString();

            if (Request.QueryString["keyword"] != null)
                txtKeyword.Text = Request.QueryString["keyword"].Trim();
            if (Request.QueryString["zoneId"] != null)
                DropZone.SelectedValue = Request.QueryString["zoneId"];
        }
        #endregion

        #region StatusContent
        private int _StatusContent;
        public int StatusContent
        {
            set { _StatusContent = value; }
            get { return _StatusContent; }
        }
        #endregion
    }
}